package talayaco.dao.impl;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import talayaco.dao.CorralDAO;
import talayaco.resources.connect.SqlMapConfig;

import com.ibatis.sqlmap.client.SqlMapClient;

public class CorralDAOImpl implements CorralDAO {

	private SqlMapClient sqlMapClient = SqlMapConfig.getSqlMap();

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#insertCorral(java.util.Map)
	 */
	public void insertCorral(Map<String, String> datosCorral) throws Exception {
		sqlMapClient.insert("insertCorral", datosCorral);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#deleteCorral(java.lang.String)
	 */
	public void deleteCorral(String nombreCorral) throws Exception {
		sqlMapClient.delete("deleteCorral", nombreCorral);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#getCorralByNombre(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public Map<String, String> getCorralByNombre(String nombreCorral)
			throws Exception {
		Map<String, String> corral = (Map<String, String>) sqlMapClient
				.queryForObject("getCorralByNombre", nombreCorral);

		return corral;
	}

	@SuppressWarnings("unchecked")
	public List<String> getNombreCorrales() throws Exception {

		List<String> corral = (List<String>) sqlMapClient
				.queryForList("getNombreCorrales");

		return corral;

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#existeCorral(java.lang.String)
	 */
	public String existeCorral(String nombreCorral) throws Exception {

		String existe = (String) sqlMapClient.queryForObject("existeCorral",
				nombreCorral);

		return existe;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#existePesajeFecha(java.util.Date)
	 */
	public String existePesajeFecha(String fecha) throws Exception {

		String existe = (String) sqlMapClient.queryForObject(
				"existePesajeFecha", fecha);

		return existe;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#updateCorral(java.util.Map)
	 */
	public void updateCorral(Map<String, Object> datosCorral) throws Exception {

		sqlMapClient.update("updateCorral", datosCorral);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#getTipoAnimalByNombre(java.lang.String)
	 */
	public String getTipoAnimalByNombre(String nombre) throws Exception {
		return (String) sqlMapClient.queryForObject("getTipoCorralByNombre",
				nombre);
	}

	public String getNombreCorralById(String id) throws Exception {
		return (String) sqlMapClient.queryForObject("getNombreCorralById", id);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#insertPesajes(java.lang.String,
	 * java.lang.String)
	 */
	public void insertPesajes(String id, String cantidad, Date fecha,
			Long cantidadAnimales) throws Exception {
		Map<String, Object> datosPesaje = new HashMap<String, Object>();
		datosPesaje.put("id", id);
		datosPesaje.put("cantidad", cantidad);
		datosPesaje.put("fecha", fecha);
		datosPesaje.put("cantidadAnimales", cantidadAnimales);

		sqlMapClient.update("insertPesajes", datosPesaje);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#getIdCorralByNombre(java.lang.String)
	 */
	public String getIdCorralByNombre(String nombre) throws Exception {
		return (String) sqlMapClient.queryForObject("getIdCorralByNombre",
				nombre);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#updateMovimientoByCaravana(java.util.Map)
	 */
	public void updateMovimientoByCaravana(Map<String, String> datosAnimal)
			throws Exception {
		sqlMapClient.update("updateMovimientoByCaravana", datosAnimal);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#updateCorralAnimal(java.util.Map)
	 */
	public void updateCorralMovimiento(Map<String, String> datosAnimal)
			throws Exception {
		sqlMapClient.update("updateCorralAnimal", datosAnimal);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#getCorrales()
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getCorrales() throws Exception {
		return (List<Map<String, String>>) sqlMapClient
				.queryForList("getCorrales");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#cantidadDatosCorral(java.lang.String)
	 */
	public Long cantidadDatosCorral(String nombre) throws SQLException {
		return (Long) sqlMapClient.queryForObject("cantidadDatosCorralAnimal",
				nombre)
				+ (Long) sqlMapClient.queryForObject(
						"cantidadDatosCorralCantidad", nombre);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * talayaco.dao.CorralDAO#getFechaUltimaModificacionCorral(java.lang.String)
	 */
	public Date getFechaUltimaModificacionCorral(String tipoDieta)
			throws SQLException {
		Date fecha = (Date) sqlMapClient.queryForObject(
				"getFechaUltimaModificacionCorral", tipoDieta);
		return fecha;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#getCantidadAnimalesEnCorral(java.lang.String)
	 */
	public Long getCantidadAnimalesEnCorral(String idCorral) throws Exception {
		return (Long) sqlMapClient.queryForObject("cantidadAnimalesPorCorral",
				idCorral);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see talayaco.dao.CorralDAO#getReportePesajes(java.util.Date,
	 * java.util.Date, java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	public List<Map<String, String>> getReportePesajes(Date fechaDesde,
			Date fechaHasta, String nombre) throws Exception {
		Map<String, Object> datosConsulta = new HashMap<String, Object>();
		datosConsulta.put("fechaDesde", fechaDesde);
		datosConsulta.put("fechaHasta", fechaHasta);
		datosConsulta.put("nombre", nombre);
		return (List<Map<String, String>>) sqlMapClient.queryForList(
				"getDatosReportePesajes", datosConsulta);
	}
}
